PHP এবং MySQL ব্যবহার করে Complex Queries পরিচালনা করা ডেটাবেস অ্যাপ্লিকেশনগুলোকে আরও শক্তিশালী এবং কার্যকরী করে। Complex Queries সাধারণত একাধিক টেবিলের মধ্যে JOIN, GROUP BY, HAVING, ORDER BY, WHERE, এবং SUBQUERIES এর মাধ্যমে আরও জটিল এবং তথ্যপূর্ণ ফলাফল বের করতে ব্যবহৃত হয়।
এখানে PHP এবং MySQL ব্যবহার করে বিভিন্ন ধরনের Complex Query পরিচালনার কিছু উদাহরণ দেওয়া হচ্ছে।
1. INNER JOIN ব্যবহার করে Complex Query
INNER JOIN একাধিক টেবিলের মধ্যে সাধারণ রেকর্ডগুলো বের করে। ধরুন, আমাদের দুটি টেবিল রয়েছে—users এবং orders। এখানে, আমরা একটি Complex Query তৈরি করব, যা ব্যবহারকারীর তথ্য এবং তার অর্ডারের তথ্য একসাথে দেখাবে।
1.1 Example: INNER JOIN
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// MySQLi সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL কুয়েরি তৈরি
$sql = "SELECT users.id, users.name, orders.order_id, orders.product_name
FROM users
INNER JOIN orders ON users.id = orders.user_id";
$result = $conn->query($sql);
// ফলাফল চেক করা
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Order ID: " . $row["order_id"]. " - Product: " . $row["product_name"]. "<br>";
}
} else {
echo "0 results";
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এখানে, INNER JOIN ব্যবহার করে users এবং orders টেবিলের মধ্যে সংযোগ স্থাপন করা হয়েছে, যেখানে users.id = orders.user_id।
2. LEFT JOIN ব্যবহার করে Complex Query
LEFT JOIN সমস্ত রেকর্ড লেফট টেবিল থেকে এবং রাইট টেবিল থেকে মিল পাওয়া রেকর্ডগুলো বের করে। যদি রাইট টেবিলের সাথে কোনো মেলামেলা না থাকে, তাহলে NULL মান প্রদান করবে।
2.1 Example: LEFT JOIN
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// MySQLi সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL কুয়েরি তৈরি
$sql = "SELECT users.id, users.name, orders.order_id, orders.product_name
FROM users
LEFT JOIN orders ON users.id = orders.user_id";
$result = $conn->query($sql);
// ফলাফল চেক করা
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Order ID: " . $row["order_id"]. " - Product: " . $row["product_name"]. "<br>";
}
} else {
echo "0 results";
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এখানে, LEFT JOIN ব্যবহার করে আমরা সমস্ত users টেবিলের রেকর্ডগুলো এবং সেই সাথে orders টেবিলের সম্পর্কিত রেকর্ডগুলো বের করেছি। যদি কোনো ব্যবহারকারীর অর্ডার না থাকে, তাহলে অর্ডারের কলামে NULL দেখানো হবে।
3. GROUP BY এবং HAVING ব্যবহার করে Complex Query
GROUP BY একাধিক রেকর্ডকে একটি গ্রুপে সংগ্রহ করে এবং HAVING ব্যবহৃত হয় গ্রুপড ডেটা ফিল্টার করতে।
3.1 Example: GROUP BY এবং HAVING
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// MySQLi সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL কুয়েরি তৈরি
$sql = "SELECT product_name, COUNT(*) as total_orders
FROM orders
GROUP BY product_name
HAVING COUNT(*) > 5";
$result = $conn->query($sql);
// ফলাফল চেক করা
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Product: " . $row["product_name"]. " - Total Orders: " . $row["total_orders"]. "<br>";
}
} else {
echo "0 results";
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এখানে, GROUP BY ব্যবহার করে আমরা orders টেবিলের প্রতিটি পণ্যের জন্য অর্ডারের সংখ্যা গণনা করেছি এবং HAVING ব্যবহার করে সেই পণ্যগুলো ফিল্টার করেছি যার অর্ডারের সংখ্যা ৫-এর বেশি।
4. SUBQUERY ব্যবহার করে Complex Query
SUBQUERY (বা Nested Query) একটি কুয়েরি যা অন্য কুয়েরির মধ্যে লেখা হয়। এটি সাধারণত WHERE, FROM বা HAVING ক্লজের মধ্যে ব্যবহৃত হয়।
4.1 Example: Subquery in WHERE Clause
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// MySQLi সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL কুয়েরি তৈরি
$sql = "SELECT id, name, email
FROM users
WHERE id IN (SELECT user_id FROM orders WHERE product_name = 'Laptop')";
$result = $conn->query($sql);
// ফলাফল চেক করা
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "0 results";
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এখানে, একটি Subquery ব্যবহার করা হয়েছে যা orders টেবিল থেকে সেই user_id গুলো খুঁজে বের করবে যাদের "Laptop" পণ্য অর্ডার করেছে। তারপর, মূল কুয়েরি ওই user_id এর ভিত্তিতে users টেবিল থেকে ডেটা বের করবে।
5. ORDER BY ব্যবহার করে Complex Query
ORDER BY ব্যবহৃত হয় কুয়েরির ফলাফল সাজানোর জন্য, যা ASC (Ascending) বা DESC (Descending) অর্ডারে সাজানো যায়।
5.1 Example: ORDER BY
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// MySQLi সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL কুয়েরি তৈরি
$sql = "SELECT id, name, email
FROM users
ORDER BY name ASC";
$result = $conn->query($sql);
// ফলাফল চেক করা
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "0 results";
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এখানে, ORDER BY ব্যবহার করে users টেবিলের রেকর্ডগুলো name কলাম অনুযায়ী Ascending (ASC) অর্ডারে সাজানো হয়েছে।
উপসংহার
PHP এবং MySQL এর মাধ্যমে Complex Queries পরিচালনা করা ডেটাবেসের কার্যক্ষমতা এবং তথ্য বিশ্লেষণের ক্ষমতা বাড়ায়। বিভিন্ন JOIN পদ্ধতি, GROUP BY, HAVING, ORDER BY, এবং SUBQUERIES ব্যবহার করে আপনি আরও জটিল এবং কার্যকরী ডেটা অনুসন্ধান করতে পারেন। এই টেকনিকগুলো ব্যবহার করে আপনার অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং দক্ষ করা সম্ভব।
Read more